from django.db import models

# Create your models here.

"""
1. 模型类需要继承自  model.Model
2. 定义属性(对应字段)
    id 系统默认会生成
    属性名=models.类型
    2.1 属性名 对应 就是字段名
        不要使用python和mysql关键字.
        不要使用连续下划线.__
    2.2 类型 MySql类型.
        BooleanField
        AutoField
        CharField
        TextField
        IntegerField
        TimeField
        DateField
        models.DecimalField # 货币类型
        
    2.3 选项 是否有默认值 是否唯一，是否可为null, 
        CharField必须设置max_length
        verbose_name 主要是admin站点使用.
    对应的 sql
        create table `qq_user` (
            id int,
            name varchar(10) not null default ''
        )
     
3. 改变表的名称.
    默认表的名称是: 子应用名_类名 都是小写
    修改表的名字. class Meta.     
   
4. 有些可以先定义表，再自动生成类.        
"""


class BookInfo(models.Model):
    name = models.CharField(max_length=20, unique=True, verbose_name='名字')
    pub_date = models.DateField(null=True, verbose_name='出版日期')
    readcount = models.IntegerField(default=0, verbose_name='阅读数量')
    commentcount = models.IntegerField(default=0, verbose_name='评论数量')
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')


    class Meta:
        db_table = "t_bookinfo"
        verbose_name = '书籍管理'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

class PeopleInfo(models.Model):
    # 定义一个有序字典
    GENDER_CHOICE = (
        (1, '男'),
        (2, '女'),
    )

    name = models.CharField(max_length=20, unique=True, verbose_name='人名')
    gender = models.SmallIntegerField(choices=GENDER_CHOICE, default=1, verbose_name='性别')
    description = models.CharField(max_length=100, verbose_name='描述', null=True)
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')

    # 外键
    # 系统会自动未外键添加_id
    # 外键的级联操作.
    # 1    对    多
    # 主表 ->    从表
    # 书籍 ->    人物+

    # 主表的一条数据， 如果删除了， 从表数据如何处理
    # 1. 主表销毁， 从表  SET_NULL, models.SET_NULL
    # 2. SET()
    # 3. SET_DEFAULT() models.SET_DEFAULT
    # 4. 抛出异常， 不让删除. models.PROTECT
    # 5. 级联删除 models.CASCADE.
    # 6. 什么也不干: models.DO_NOTHING

    book = models.ForeignKey(BookInfo, on_delete=models.CASCADE)

    class Meta:
        db_table = 't_peopleinfo'
        verbose_name = '人物管理'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

"""
sql:
insert into t_bookinfo(name, pub_date, readcount,commentcount, is_delete) values
('射雕英雄传', '1980-5-1', 12, 34, 0),
('天龙八部', '1986-7-24', 36, 40, 0),
('笑傲江湖', '1995-12-24', 20, 80, 0),
('雪山飞狐', '1987-11-11', 58, 24, 0);

insert into t_peopleinfo(name, gender, book_id, description, is_delete)  values
    ('郭靖', 1, 1, '降龙十八掌', 0),
    ('黄蓉', 0, 1, '打狗棍法', 0),
    ('黄药师', 1, 1, '弹指神通', 0),
    ('欧阳锋', 1, 1, '蛤蟆功', 0),
    ('梅超风', 0, 1, '九阴白骨爪', 0),
    ('乔峰', 1, 2, '降龙十八掌', 0),
    ('段誉', 1, 2, '六脉神剑', 0),
    ('虚竹', 1, 2, '天山六阳掌', 0),
    ('王语嫣', 0, 2, '神仙姐姐', 0),
    ('令狐冲', 1, 3, '独孤九剑', 0),
    ('任盈盈', 0, 3, '弹琴', 0),
    ('岳不群', 1, 3, '华山剑法', 0),
    ('东方不败', 0, 3, '葵花宝典', 0),
    ('胡斐', 1, 4, '胡家刀法', 0),
    ('苗若兰', 0, 4, '黄衣', 0),
    ('程灵素', 0, 4, '医术', 0),
    ('袁紫衣', 0, 4, '六合拳', 0);
"""

